Problem
Given a binary matrix A, we want to flip the image horizontally, then invert it, and return the resulting image.
To flip an image horizontally means that each row of the image is reversed. For example, flipping [1, 1, 0] horizontally results in [0, 1, 1].
To invert an image means that each 0 is replaced by 1, and each 1 is replaced by 0. For example, inverting [0, 1, 1] results in [1, 0, 0].
Example 1:
Input: [[1,1,0],[1,0,1],[0,0,0]]
Output: [[1,0,0],[0,1,0],[1,1,1]]
Explanation: First reverse each row: [[0,1,1],[1,0,1],[0,0,0]].
Then, invert the image: [[1,0,0],[0,1,0],[1,1,1]]
Example 2:
Input: [[1,1,0,0],[1,0,0,1],[0,1,1,1],[1,0,1,0]]
Output: [[1,1,0,0],[0,1,1,0],[0,0,0,1],[1,0,1,0]]
Explanation: First reverse each row: [[0,0,1,1],[1,0,0,1],[1,1,1,0],[0,1,0,1]].
Then invert the image: [[1,1,0,0],[0,1,1,0],[0,0,0,1],[1,0,1,0]]
Notes:
1 <= A.length = A[0].length <= 20 0 <= A[i][j] <= 1
Pre analysis
Horizontal inversion and reversing a array can be done via reverse and map prototypal functions. Ideally I feel, doing this seperately will run two for-loops and this problem should be solvable via one for-loop kinda behavior , ie. doing invertion and reversing is same oop.
Post analysis
I was stuck at point of inverting bits and react a solution of +!Boolean(t) i.e inverting the bool and then converting it to number. A easier way could be using bit manipulation #todo
Another solution
Another JS specific one-liner solution
var flipAndInvertImage = function(A) {
return A.map((row) => row.reverse().map((pixel) => pixel ^ 1));
};